#ifndef MONO_PARSER_PROPERTY_TREE_PRINTER_H_
#define MONO_PARSER_PROPERTY_TREE_PRINTER_H_
#include <memory>
#include <cstddef>

namespace mono {
class PropertyNode;
typedef std::shared_ptr<PropertyNode> PropertyNodePtr;

class PropertyTreePrinter {
public:
	PropertyTreePrinter(std::ostream & output);

	void print(const PropertyNodePtr & tree, bool printRoot = false) const;
	
private:
	void printStep(const PropertyNodePtr & node, size_t level) const;
	std::string formatString(const std::string & text) const;
	std::string getLevelIndent(size_t level) const;
	std::ostream  &_output;
	bool           _bracketOwnLine;
	std::string    _indentLevel;
	
		
};
}
#endif //MONO_PARSER_PROPERTY_TREE_PRINTER_H_
